Skip to content

feat(Combinatorics/SimpleGraph/StarGraph): define star graphs#38027

Open
8e7 wants to merge 12 commits intoleanprover-community:masterfrom
8e7:star_graph
Open

feat(Combinatorics/SimpleGraph/StarGraph): define star graphs#38027
8e7 wants to merge 12 commits intoleanprover-community:masterfrom
8e7:star_graph

Conversation

@8e7
Copy link
Copy Markdown

@8e7 8e7 commented Apr 14, 2026

Add a new definition starGraph and several key lemmas. Star graphs are a trivial class of tree, often used in constructive proofs regarding trees.


All lemmas are hand written first, then golfed with the help of Claude Code.

Open in Gitpod

@github-actions github-actions bot added the new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! label Apr 14, 2026
@github-actions
Copy link
Copy Markdown

Welcome new contributor!

Thank you for contributing to Mathlib! If you haven't done so already, please review our contribution guidelines, as well as the style guide and naming conventions. In particular, we kindly remind contributors that we have guidelines regarding the use of AI when making pull requests.

We use a review queue to manage reviews. If your PR does not appear there, it is probably because it is not successfully building (i.e., it doesn't have a green checkmark), has the awaiting-author tag, or another reason described in the Lifecycle of a PR. The review dashboard has a dedicated webpage which shows whether your PR is on the review queue, and (if not), why.

If you haven't already done so, please come to https://leanprover.zulipchat.com/, introduce yourself, and mention your new PR.

Thank you again for joining our community.

@github-actions
Copy link
Copy Markdown

github-actions bot commented Apr 14, 2026

PR summary 2ff88851d5

Import changes for modified files

No significant changes to the import graph

Import changes for all files
Files Import difference
Mathlib.Combinatorics.SimpleGraph.StarGraph (new file) 978

Declarations diff

+ connected_starGraph
+ degree_starGraph_center
+ degree_starGraph_of_ne_center
+ instance [DecidableEq V] (r : V) : DecidableRel (starGraph r).Adj
+ isAcyclic_starGraph
+ isTree_starGraph
+ starGraph
+ starGraph_adj
+ starGraph_center_adj
+ starGraph_center_adj'

You can run this locally as follows
## summary with just the declaration names:
./scripts/pr_summary/declarations_diff.sh <optional_commit>

## more verbose report:
./scripts/pr_summary/declarations_diff.sh long <optional_commit>

The doc-module for scripts/pr_summary/declarations_diff.sh contains some details about this script.


No changes to technical debt.

You can run this locally as

./scripts/reporting/technical-debt-metrics.sh pr_summary
  • The relative value is the weighted sum of the differences with weight given by the inverse of the current value of the statistic.
  • The absolute value is the relative value divided by the total sum of the inverses of the current values (i.e. the weighted average of the differences).

@github-actions github-actions bot added the t-combinatorics Combinatorics label Apr 14, 2026
@vlad902
Copy link
Copy Markdown
Collaborator

vlad902 commented Apr 14, 2026

Please mark the review comments 'resolved' once you've addressed them so the next reviewer doesn't think they're still open.

Copy link
Copy Markdown
Collaborator

@IvanRenison IvanRenison left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I like the idea!
Maybe we should have StarGraph in a separate graph

· refine isAcyclic_iff_forall_adj_isBridge.mpr fun _ _ hadj ↦ ?_
exact isBridge_iff_adj_and_not_isEdgeConnected_two.mpr ⟨hadj, h hadj.ne⟩

section Star
Copy link
Copy Markdown
Collaborator

@SnirBroshi SnirBroshi Apr 14, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about moving this to a new file that imports Acyclic.lean?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested the same. I think it is a good idea to have it in a new file

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree to putting it in a new file. I'm considering adding some lemmas to characterize the metric of a star graph, as well as defining isomorphism between star graphs. Should I add these lemmas, or should I leave them for a future PR?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would add them in a separate pull request, to keep each pull request small, but both ways of doing it are okay

8e7 and others added 4 commits April 15, 2026 10:16
Co-authored-by: Snir Broshi <26556598+SnirBroshi@users.noreply.github.com>
Co-authored-by: Iván Renison <85908989+IvanRenison@users.noreply.github.com>
@8e7 8e7 changed the title feat(Combinatorics/SimpleGraph/Acyclic): define star graphs feat(Combinatorics/SimpleGraph/StarGraph): define star graphs Apr 15, 2026
Comment on lines +74 to +75
lemma isTree_starGraph (r : V) : (starGraph r).IsTree := by
refine ⟨connected_starGraph r, isAcyclic_starGraph r⟩
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
lemma isTree_starGraph (r : V) : (starGraph r).IsTree := by
refine ⟨connected_starGraph r, isAcyclic_starGraph r⟩
lemma isTree_starGraph (r : V) : (starGraph r).IsTree :=
⟨connected_starGraph r, isAcyclic_starGraph r⟩

Comment on lines +85 to +89
rw [degree, neighborFinset_eq_filter (starGraph r)]
simp only [starGraph_adj, ne_eq, true_or, and_true]
have : ({w | ¬r = w} : Finset V) = Finset.univ.erase r := by
ext v; simp [eq_comm]
rw [this, Finset.card_erase_of_mem (Finset.mem_univ r), Finset.card_univ]
Copy link
Copy Markdown
Collaborator

@vlad902 vlad902 Apr 15, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
rw [degree, neighborFinset_eq_filter (starGraph r)]
simp only [starGraph_adj, ne_eq, true_or, and_true]
have : ({w | ¬r = w} : Finset V) = Finset.univ.erase r := by
ext v; simp [eq_comm]
rw [this, Finset.card_erase_of_mem (Finset.mem_univ r), Finset.card_univ]
simp [degree, neighborFinset_eq_filter (starGraph r), starGraph_adj, Finset.univ.filter_ne r]

Comment on lines +65 to +68
· have hw : w = r := hadj.2.resolve_left h
replace hadj : w ≠ v ∧ (w = r ∨ v = r) := ⟨hadj.1.symm, hadj.2.symm⟩
rw [reachable_comm, Sym2.eq_swap]
exact this r w v hadj hw
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
· have hw : w = r := hadj.2.resolve_left h
replace hadj : w ≠ v ∧ (w = r ∨ v = r) := ⟨hadj.1.symm, hadj.2.symm⟩
rw [reachable_comm, Sym2.eq_swap]
exact this r w v hadj hw
· rw [reachable_comm, Sym2.eq_swap]
exact this r w v ⟨hadj.1.symm, hadj.2.symm⟩ (hadj.2.resolve_left h)

exact this r w v hadj hw
· subst h
apply not_reachable_of_neighborSet_right_eq_empty hadj.1
ext x; aesop
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
ext x; aesop
ext x
aesop

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new-contributor This PR was made by a contributor with at most 5 merged PRs. Welcome to the community! t-combinatorics Combinatorics

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants